import turtle  # 导入turtle模块，用于绘图
import random  # 导入random模块，用于生成随机数
import time  # 导入time模块，用于添加延迟

def get_random_color():
    # 定义一个函数来获取随机颜色
    colors = ['blue', 'green', 'purple', 'orange', 'yellow', 'magenta', 'cyan', 'brown', 'pink']  # 定义颜色列表
    return random.choice(colors)  # 随机返回一种颜色

def draw_heart(t):
    # 定义一个函数来绘制心形
    t.penup()  # 抬起画笔
    t.goto(0, -150)  # 将画笔移动到指定位置
    t.pendown()  # 放下画笔
    t.color('red')  # 设置画笔颜色为红色
    t.begin_fill()  # 开始填充
    t.left(140)  # 向左旋转140度
    t.forward(224)  # 向前移动224单位
    for _ in range(200):  # 循环200次
        t.right(1)  # 每次向右旋转1度
        t.forward(2)  # 向前移动2单位
        if _ % 10 == 0:  # 每10步更新一次屏幕
            window.update()  # 更新窗口
            time.sleep(0.01)  # 添加0.01秒的延迟
    t.left(120)  # 向左旋转120度
    for _ in range(200):  # 再次循环200次
        t.right(1)  # 每次向右旋转1度
        t.forward(2)  # 向前移动2单位
        if _ % 10 == 0:  # 每10步更新一次屏幕
            window.update()  # 更新窗口
            time.sleep(0.01)  # 添加0.01秒的延迟
    t.forward(224)  # 向前移动224单位
    t.end_fill()  # 结束填充
    t.setheading(0)  # 重置海龟方向
    t.penup()  # 抬起画笔
    window.update()  # 更新窗口

def draw_char(t, char, x, y, size, color):
    # 定义一个函数来绘制单个字符
    t.penup()  # 抬起画笔
    t.goto(x, y)  # 移动到指定位置
    t.pendown()  # 放下画笔
    t.color(color)  # 设置颜色
    t.write(char, font=("Arial", size, "bold"), align="center")  # 写字
    window.update()  # 更新窗口

def draw_love_message():
    # 定义主函数来绘制整个爱的表白
    global window  # 声明全局变量window
    window = turtle.Screen()  # 创建一个窗口
    window.setup(800, 600)  # 设置窗口大小
    window.title("爱的表白")  # 设置窗口标题
    window.bgcolor("pink")  # 设置背景颜色为粉色
    
    window.tracer(0)  # 关闭动画效果
    
    t = turtle.Turtle()  # 创建一个海龟对象
    t.hideturtle()  # 隐藏海龟
    t.speed(0)  # 设置绘制速度为最快
    
    draw_heart(t)  # 绘制心形
    
    # 绘制"人民币"
    name = "人民币"  # 定义名字
    name_positions = [(-100, 50), (0, 50), (100, 50)]  # 定义名字每个字的位置
    
    used_colors = set()  # 创建一个集合来存储已使用的颜色
    for char, (x, y) in zip(name, name_positions):  # 遍历名字的每个字和对应的位置
        color = get_random_color()  # 获取一个随机颜色
        while color in used_colors:  # 如果颜色已被使用，就重新获取
            color = get_random_color()
        used_colors.add(color)  # 将使用的颜色添加到集合中
        draw_char(t, char, x, y, 50, color)  # 绘制字符
        time.sleep(0.2)  # 添加0.2秒的延迟
    
    # 绘制"我爱你"
    message = "我爱你"  # 定义消息
    message_positions = [(-100, -50), (0, -50), (100, -50)]  # 定义消息每个字的位置
    
    for char, (x, y) in zip(message, message_positions):  # 遍历消息的每个字和对应的位置
        color = get_random_color()  # 获取一个随机颜色
        while color in used_colors:  # 如果颜色已被使用，就重新获取
            color = get_random_color()
        used_colors.add(color)  # 将使用的颜色添加到集合中
        draw_char(t, char, x, y, 50, color)  # 绘制字符
        time.sleep(0.2)  # 添加0.2秒的延迟
    
    # 添加闪烁效果
    stars = []  # 创建一个列表来存储星星
    for _ in range(20):  # 创建20个星星
        star = turtle.Turtle()  # 创建一个新的海龟对象作为星星
        star.hideturtle()  # 隐藏海龟
        star.penup()  # 抬起画笔
        star.color(get_random_color())  # 设置随机颜色
        star.goto(random.randint(-350, 350), random.randint(-250, 250))  # 随机位置
        stars.append(star)  # 将星星添加到列表中
    
    def animate():
        # 定义动画函数
        for star in stars:  # 遍历每个星星
            star.clear()  # 清除之前的绘制
            if star.isvisible():  # 如果星星可见
                star.hideturtle()  # 隐藏星星
            else:
                star.showturtle()  # 显示星星
                star.write("★", font=("Arial", 20, "normal"), align="center")  # 绘制星星
        window.update()  # 更新窗口
        window.ontimer(animate, 500)  # 0.5秒后再次调用animate函数
    
    animate()  # 开始动画
    window.mainloop()  # 进入主循环

if __name__ == "__main__":
    draw_love_message()  # 如果这个脚本是主程序，则执行draw_love_message函数